﻿#region Imports
using System.ComponentModel;
using CommonUtilities.Util;
#endregion

namespace CommonUtilities.Enums
{
    #region Enums
    /// <summary>
    /// Application to open files
    /// </summary>
    public enum eOpeningApp
    {
        /// <summary>
        /// Windows Explorer/Default viewer for file type
        /// </summary>
        Default,
        /// <summary>
        /// MS Office Excel
        /// </summary>
        MSExcel,
        /// <summary>
        /// MS Office Word
        /// </summary>
        MSWord,
        /// <summary>
        /// Notepad
        /// </summary>
        Notepad,
        /// <summary>
        /// PDF readers
        /// </summary>
        PDFReader
    }

    /// <summary>
    /// Specifies path validation type
    /// </summary>
    public enum ePathValidation
    {
        /// <summary>
        /// Validation for directory
        /// </summary>
        Directory,
        /// <summary>
        /// Validation for file
        /// </summary>
        File
    }

    /// <summary>
    /// Value comparers
    /// </summary>
    [DefaultValue(Equals)]
    public enum eComparers
    {
        Equals,
        GreaterThan,
        LesserThan,
        GreaterThanOrEquals,
        LesserThanOrEquals,
        NotEquals,
        NotGreaterThan,
        NotLesserThan,
        NotGreaterThanOrEquals,
        NotLesserThanOrEquals,
    }

    /// <summary>
    /// Class inheritence matching type
    /// </summary>
    public enum eMatchType
    {
        /// <summary>
        /// Matches exact
        /// </summary>
        Exact = 0,
        /// <summary>
        /// Matches in Inheritence
        /// </summary>
        Hierarchy = -1
    }

    /// <summary>
    /// Inversion mode
    /// </summary>
    public enum eInversionMode
    {
        Horizontal = 1,
        Vertical = 2
    }

    /// <summary>
    /// Serialization format
    /// </summary>
    public enum eSerializationFormat
    {
        JSon = 0,
        Xml = 1
    }

    /// <summary>
    /// Trim direction
    /// </summary>
    public enum eTrimDirection
    {
        Left = 0,
        Right = 1
    }

    /// <summary>
    /// Case of file extension
    /// </summary>
    public enum eExtnCase
    {
        LCase = 1,
        UCase = -1,
        SameCase = 0
    }

    /// <summary>
    /// Specifies Show/Hide state
    /// </summary>
    public enum eShowHideType
    {
        /// <summary>
        /// Show
        /// </summary>
        Show,
        /// <summary>
        /// Hide
        /// </summary>
        Hide,
        /// <summary>
        /// Toggles current value
        /// </summary>
        Toggle
    }

    /// <summary>
    /// Types for holding byte-value
    /// </summary>
    [DefaultValue(B)]
    public enum eByteValueType
    {
        /// <summary>
        /// Byte
        /// </summary>
        B = 0,
        /// <summary>
        /// Kilobyte
        /// </summary>
        KB = 1,
        /// <summary>
        /// Megabyte
        /// </summary>
        MB = 2,
        /// <summary>
        /// Gigabyte
        /// </summary>
        GB = 3,
        /// <summary>
        /// Terabyte
        /// </summary>
        TB = 4

        // MemMgmt: Add <enum value> here for new byte-type
    }

    /// <summary>
    /// Sorting direction
    /// </summary>
    public enum eSortDirection
    {
        Ascending,
        Descending
    }

    /// <summary>
    /// Notification sounds
    /// </summary>
    public enum eNotificationSound
    {
        Test,

        WindowState,
        Cleanup,
        Start,
        LogOff,
        Exit,
    }

    /// <summary>
    /// Alignment direction in UI
    /// </summary>
    public enum eUIDirection
    {
        All,
        BottomLeft,
        BottomRight,
        TopLeft,
        TopRight
    }

    /// <summary>
    /// Direction of button
    /// </summary>
    public enum eButtonDirection
    {
        Default,
        Top,
        Bottom,
        Left,
        Right
    }

    public enum eAndOrNone
    {
        /// <summary>
        /// None are valid (NAND operation)
        /// </summary>
        None = -1,
        /// <summary>
        /// Any is valid (OR operation)
        /// </summary>
        Any = 0,
        /// <summary>
        /// All are valid (AND operation)
        /// </summary>
        All = 1
    }

    /// <summary>
    /// Specifies folder fetching types
    /// </summary>
    public enum eFetchTypes
    {
        /// <summary>
        /// All directions
        /// </summary>
        All,
        /// <summary>
        /// Previous directory/drive (alphabetically)
        /// </summary>
        Prev,
        /// <summary>
        /// Next directory/drive (alphabetically)
        /// </summary>
        Next,
        /// <summary>
        /// Parent directory/root
        /// </summary>
        Up,
        /// <summary>
        /// Child directory
        /// </summary>
        Down
    }

    public enum eConstraint
    {
        Recommended, Required, Optional, Automatic
    }
    #endregion Enums

    /// <summary>
    /// Enumerator utility
    /// </summary>
    public static class Enumerators
    {
        #region Methods
        public static string ToString()
        {
            return Utilities.ToString(typeof(Enumerators));
        }
        #endregion
    }

    //[DefaultValue(eLogSeverity.Information)]
    //public enum eLogSeverity
    //{
    //    Information = 1,
    //    Warning = 2,
    //    Critical = 4,
    //    Fatal = 8
    //}
}
